package com.desire.test;

import java.text.ParseException;
import java.util.Timer;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @author desire
 */
public class _40_线程工具_Timer_Task {
    /**
     * Timer类的常用其他方法：
     * cancel() 终止此计时器，丢弃所有当前已安排的任务。
     * purge() 从此计时器的任务队列中移除所有已取消的任务。
     * schedule(TimerTask task, Date time) 安排在指定的时间执行指定的任务。
     * timerTask类的常用其他方法：
     * cancel() 取消此计时器任务。
     * run() 此计时器任务要执行的操作。
     * scheduledExecutionTime() 返回此任务最近行的已安排执行时间
     */
    public static void main(String[] args) throws ParseException {


        Timer timer = new Timer();

        /*timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.printf("%1$tF %1$tT%n", System.currentTimeMillis());
            }
        }, 0, 1000);*/
        //Delay -任务执行前的延迟时间，单位是毫秒。
        //period -连续任务执行之间的时间间隔，单位为毫秒。
        // 定时任务 每隔1000毫秒打印系统时间


        // schedule 有很多个重载方法

      /*  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                timer.cancel();
            }
        }, sdf.parse("2022-02-08 10:53:00"));
        // 当到达指定时间 就取消当前任务

*/

     /*   Timer t2 = new Timer();
        TimerTask tt = new TimerTask() {
            @Override
            public void run() {
                System.out.println("hello world Timer");
                t2.cancel();
            }
        };
        t2.schedule(tt, 1000);*/

          /*
                schedule和scheduleAtFixedRate的区别在于，如果指定开始执行的时间在当前系统运行时间之前，
                scheduleAtFixedRate会把已经过去的时间也作为周期执行，而schedule不会把过去的时间算上。
            */

        ScheduledExecutorService ses = new ScheduledThreadPoolExecutor(1);
        ses.schedule(() -> System.out.println("hello world222"), 1, TimeUnit.SECONDS);
        ses.scheduleAtFixedRate(() -> System.out.println("hello world5"), 5, 1, TimeUnit.SECONDS);

    }
}
